package com.hx.setting.model;

import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;

/**
 * 动态查询条件。
 * 内部类
 * Generate Date : 2013-04-27
 * Generate Version : v3.0
 * Generate Name : Honey v3.0 Test
 * Generate User : Administrator
 * JDK Version : 1.5
 * Generate Date : 2014-03-16
 * Generate Version : v3.0
 * Generate Name : Honey v3.1 Test
 * Generate User : THINK
 * JDK Version : 1.5
 */
public final class Condition<T extends GeneratedCriteria<?, ?>>
{

	/** 排序字段。 */
	private String	sort;

	/** 去除重复列。 */
	private boolean	distinct;

	private List<T>	oredCriteria;

	private T		generatedCriteria;

	/** 
	 * 构造方法。
	 * @param  generatedCriteria {@code   T}
	 * 
	 * @see    T
	 */
	public Condition(T generatedCriteria)
	{
		oredCriteria = new ArrayList<T>();
		this.generatedCriteria = generatedCriteria;
		if ( generatedCriteria.getCriteria().size() > 0 )
		{
			oredCriteria.add( generatedCriteria );
		}
	}

	/** 
	 * 设定排序方式。注意字符串中不包含orderby字符, 例如: fieldName DESC .
	 * @param  orderBy {@code   String}
	 * @return
	 * @see    String
	 */
	public void setOrderBy(String orderBy)
	{
		this.sort = orderBy;
	}

	/** 
	 * 获取排序列。
	 * @return  String
	 */
	public String getOrderBy()
	{
		return this.sort;
	}

	/** 
	 * 设定是否去除重复列, true:是 false:否。
	 * @param  distinct {@code   boolean}
	 * @return
	 */
	public void setDistinct(boolean distinct)
	{
		this.distinct = distinct;
	}

	/** 
	 * 获取去除重复列, true:是 false:否。
	 * @return  boolean
	 */
	public boolean isDistinct()
	{
		return this.distinct;
	}

	/** 
	 * 获取排序列。
	 * @return  java.util.List<T>
	 */
	public List<T> getOredCriteria()
	{
		return this.oredCriteria;
	}

	/** 
	 * @param  criteria {@code   T}
	 * @return
	 * @see    T
	 */
	public void or(T criteria)
	{
		oredCriteria.add( criteria );
	}

	/** 
	 * 使用or连接新的查询条件
	 * @return  T
	 */
	public T or()
	{
		T criteria = createCriteriaInternal();
		oredCriteria.add( criteria );
		return criteria;
	}

	/** 
	 * @return  T
	 */
	public T createCriteria()
	{
		T criteria = createCriteriaInternal();
		if ( oredCriteria.size() == 0 )
		{
			oredCriteria.add( criteria );
		}
		return criteria;
	}

	/** 
	 * @return  T
	 */
	public T createCriteriaInternal()
	{
		T o = null;
		if ( oredCriteria.size() > 0 )
		{
			try
			{
				o = (T) generatedCriteria.getClass().newInstance();
			}
			catch ( Exception e )
			{
				e.printStackTrace();
			}
			return o;
		}
		else
		{
			return this.generatedCriteria;
		}
	}

	/** 
	 * 清除当前的查询条件环境。
	 * @return
	 */
	public void clear()
	{
		this.oredCriteria.clear();
		this.generatedCriteria.getAllCriteria().clear();
		this.sort = null;
		this.distinct = false;
	}

	public static Condition createDefaultCondition()
	{
		return new Condition( new GeneratedCriteria()
		{
		} );
	}
}
/* Honey v3.1 Test - version:1 - OriginalChecksum:B73ba034e5991a61c080e6da4eb35b5f4 (do not edit this line) */
